function debounce(callback,wait=500){
                let t=null   //定义定时器id


               return function(...args){
                if(t!==null){
                    clearTimeout(t)  //如果定时有id为t的定时器  也就是上一次的定时任务还没完成 那么就关掉定时器
                }

                // console.log(this); //这里的debouce 是由input 调用的 this就是input

            
                t=setTimeout(()=>{
                    console.log(this); //箭头函数的this是上下文的this 也就是debounce的调用者
                                        //如果settimeout回调是一个普通函数 那么this就是window
                    
                   if(callback) callback.apply(this,args) //改变callback函数的this指向为debounce调用者 此案例也就是input 包装成原先input的回调
                    //由于debounce return 的是一个函数 也就成了原先input 回调的形式  自然能够拿到回调参数 事件对象等
                    
                },wait)

               }
            }

        
        // input oninput回调 要求一个函数    
       inp.oninput=debounce(function(...args){
    
        console.log(args[0].target); //拿到了e

        //  console.log(this) 
        //这里由于改变了this 指向 也就成了oninput
       })